package com.spsoft.vatoutinv.service.negativestream;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.spsoft.core.model.Result;
import com.spsoft.system.entity.NvatNegativestream;
import com.spsoft.vatoutinv.model.dto.negativestream.*;
import com.spsoft.vatoutinv.model.vo.negativestream.NegativestreamCombineLockVo;
import com.spsoft.vatoutinv.model.vo.negativestream.NegativestreamDealVo;
import com.spsoft.vatoutinv.model.vo.negativestream.NegativestreamForViewVo;
import com.spsoft.vatoutinv.model.vo.negativestream.NegativestreamQueryVo;

/**
 * <p>
 * 负数流水管理表 服务类
 * </p>
 *
 * @author dingchengyun
 * @since 2024-02-26
 */
public interface NvatNegativestreamForVatService extends IService<NvatNegativestream> {


    /**
     * 主页面分页查询
     *
     * @param params
     * @return
     */
    Result<IPage<NegativestreamQueryVo>> queryForPage(NegativestreamQueryPageDto params);

    /**
     * 点击关注按钮，校验是否关注，如果没关注，则关注
     */
    boolean updateNeFocusByid(String id);

    /**
     * 根据id释放负数流水管理表数据
     * 因此处无对应的流水，所以释放操作不包含流水的释放
     *
     * @param id
     * @return
     */
    boolean releaseByid(NegativesCommonDealDto params);

    /**
     * 针对处理页面
     * <p>
     * 点击处理按钮时，
     * <p>
     * 自动根据选择的数据的rdid查询流水信息
     * <p>
     * 结果为单条
     *
     * @param rdid
     * @return
     */
    Result<NegativestreamDealVo> queryByRdid(String rdid);

    /**
     * 点击处理按钮，处理选择的负数流水管理表中数据，
     * 参数：处理状态
     * 操作说明
     * 处理人
     * 处理日期
     *
     * @param params
     */
    boolean dealByRdid(NegativesDealDto params);

    /**
     * 查看已处理的流水
     * 参数： id和rdid
     * <p>
     * 根据选择rdid查询流水
     * 返回自定义的vo
     * <p>
     * 根据id查询负数流水管理表中数据
     * 也封装到这个自定义vo中
     *
     * @param params
     * @return
     */
    Result<NegativestreamForViewVo> queryForView(NegativeForViewDto params);

    /**
     * 查询正数流水页面
     * 参数 ：
     * 交易日期起
     * 交易日期止
     * 业务编号
     * 投保单号
     * 分页数据
     * <p>
     * 返回vo根据页面自定义
     *
     * @param params
     * @return
     */
    Result<IPage<NegativestreamCombineLockVo>> queryCombineLock(NegativestreamCombineLockQueryPageDto params);

    /**
     * 参数
     * 正负流水的rdid
     * <p>
     * 分别查询正负流水
     * 验证正负流水的税率，金额，投保人，
     * 然后分别更新负数流水管理表和流水数据
     *
     * @param params
     * @return
     */
    Result dealCombineLockByRdid(NegativesDealDto params);
}
